home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / language / iconv8_s.arc / ICONT.ARC / ERR.C < prev    next >
C/C++ Source or Header  |  1990-03-28  |  8KB  |  262 lines

  1. /*
  2.  * err.c -- routines for producing error messages.
  3.  */
  4.  
  5. #include "..\h\config.h"
  6. #include "general.h"
  7. #include "token.h"
  8. #include "tlex.h"
  9. #include "trans.h"
  10. #include "tree.h"
  11. #include "tproto.h"
  12.  
  13. /*
  14.  * Prototype.
  15.  */
  16.  
  17. hidden    char    *mapterm    Params((int typ,struct node *val));
  18.  
  19. extern int tfatals;
  20.  
  21. static struct errmsg {
  22.    int    e_state;        /* parser state number */
  23.    char *e_mesg;        /* message text */
  24.    } errtab[] = {
  25.  
  26.  
  27. /*
  28.  * Initialization of table that maps error states to messages.
  29.  */
  30.  
  31.      1, "end of file expected",
  32.      2, "global, record, or procedure declaration expected",
  33.     11, "missing semicolon",
  34.     13, "link list expected",
  35.     15, "global, record, or procedure declaration expected",
  36.     16, "missing record name",
  37.     19, "invalid global declaration",
  38.     24, "missing procedure name",
  39.     26, "missing field list in record declaration",
  40.     28, "missing end",
  41.     29, "missing semicolon or operator",
  42.     44, "invalid argument for unary operator",
  43.     45, "invalid argument for unary operator",
  44.     46, "invalid argument for unary operator",
  45.     47, "invalid argument for unary operator",
  46.     48, "invalid argument for unary operator",
  47.     49, "invalid argument for unary operator",
  48.     50, "invalid argument for unary operator",
  49.     51, "invalid argument for unary operator",
  50.     52, "invalid argument for unary operator",
  51.     53, "invalid argument for unary operator",
  52.     54, "invalid argument for unary operator",
  53.     55, "invalid argument for unary operator",
  54.     56, "invalid argument for unary operator",
  55.     57, "invalid argument for unary operator",
  56.     58, "invalid argument for unary operator",
  57.     59, "invalid argument for unary operator",
  58.     60, "invalid argument for unary operator",
  59.     61, "invalid argument for unary operator",
  60.     62, "invalid argument for unary operator",
  61.     63, "invalid argument for unary operator",
  62.     64, "invalid argument for unary operator",
  63.     65, "invalid argument for unary operator",
  64.     66, "invalid argument for unary operator",
  65.     67, "invalid argument for unary operator",
  66.     77, "invalid create expression",
  67.     84, "invalid keyword construction",
  68.     92, "invalid if control expression",
  69.     93, "invalid case control expression",
  70.     94, "invalid while control expression",
  71.     95, "invalid until control expression",
  72.     96, "invalid every control expression",
  73.     97, "invalid repeat expression",
  74.    100, "missing link file name",
  75.    101, "missing parameter list in procedure declaration",
  76.    104, "invalid local declaration",
  77.    105, "invalid initial expression",
  78.    110, "invalid argument",
  79.    111, "invalid argument",
  80.    112, "invalid argument in assignment",
  81.    113, "invalid argument in assignment",
  82.    114, "invalid argument in assignment",
  83.    115, "invalid argument in assignment",
  84.    116, "invalid argument in augmented assignment",
  85.    117, "invalid argument in augmented assignment",
  86.    118, "invalid argument in augmented assignment",
  87.    119, "invalid argument in augmented assignment",
  88.    120, "invalid argument in augmented assignment",
  89.    121, "invalid argument in augmented assignment",
  90.    122, "invalid argument in augmented assignment",
  91.    123, "invalid argument in augmented assignment",
  92.    124, "invalid argument in augmented assignment",
  93.    125, "invalid argument in augmented assignment",
  94.    126, "invalid argument in augmented assignment",
  95.    127, "invalid argument in augmented assignment",
  96.    128, "invalid argument in augmented assignment",
  97.    129, "invalid argument in augmented assignment",
  98.    130, "invalid argument in augmented assignment",
  99.    131, "invalid argument in augmented assignment",
  100.    132, "invalid argument in augmented assignment",
  101.    133, "invalid argument in augmented assignment",
  102.    134, "invalid argument in augmented assignment",
  103.    135, "invalid argument in augmented assignment",
  104.    136, "invalid argument in augmented assignment",
  105.    137, "invalid argument in augmented assignment",
  106.    138, "invalid argument in augmented assignment",
  107.    139, "invalid argument in augmented assignment",
  108.    140, "invalid argument in augmented assignment",
  109.    141, "invalid argument in augmented assignment",
  110.    142, "invalid argument in augmented assignment",
  111.    143, "invalid argument in augmented assignment",
  112.    144, "invalid to clause",
  113.    145, "invalid argument in alternation",
  114.    146, "invalid argument",
  115.    147, "invalid argument",
  116.    148, "invalid argument",
  117.    149, "invalid argument",
  118.    150, "invalid argument",
  119.    151, "invalid argument",
  120.    152, "invalid argument",
  121.    153, "invalid argument",
  122.    154, "invalid argument",
  123.    155, "invalid argument",
  124.    156, "invalid argument",
  125.    157, "invalid argument",
  126.    158, "invalid argument",
  127.    159, "invalid argument",
  128.    160, "invalid argument",
  129.    161, "invalid argument",
  130.    162, "invalid argument",
  131.    163, "invalid argument",
  132.    164, "invalid argument",
  133.    165, "invalid argument",
  134.    166, "invalid argument",
  135.    167, "invalid argument",
  136.    168, "invalid argument",
  137.    169, "invalid argument",
  138.    170, "invalid argument",
  139.    171, "invalid argument",
  140.    172, "invalid argument",
  141.    173, "invalid argument",
  142.    177, "invalid field name",
  143.    204, "missing right parenthesis",
  144.    206, "missing right brace",
  145.    208, "missing right bracket",
  146.    214, "missing then",
  147.    215, "missing of",
  148.    220, "missing identifier",
  149.    223, "missing right parenthesis",
  150.    225, "missing end",
  151.    226, "invalid declaration",
  152.    227, "missing semicolon or operator",
  153.    293, "missing right bracket",
  154.    296, "missing right brace",
  155.    298, "missing right parenthesis",
  156.    305, "invalid do clause",
  157.    306, "invalid then clause",
  158.    307, "missing left brace",
  159.    308, "invalid do clause",
  160.    309, "invalid do clause",
  161.    310, "invalid do clause",
  162.    312, "invalid argument list",
  163.    318, "invalid by clause",
  164.    320, "invalid section",
  165.    331, "invalid case clause",
  166.    336, "missing right bracket",
  167.    338, "missing right bracket or ampersand",
  168.    340, "invalid else clause",
  169.    341, "missing right brace or semicolon",
  170.    343, "missing colon",
  171.    344, "missing colon or ampersand",
  172.    349, "invalid case clause",
  173.    350, "invalid default clause",
  174.    351, "invalid case clause",
  175.     -1,  "syntax error"
  176.    };
  177.  
  178. /*
  179.  * yyerror produces syntax error messages.  tok is the offending token
  180.  *  (yychar), lval is yylval, and state is the parser's state.
  181.  *
  182.  * errtab is searched for the state, if it is found, the associated
  183.  *  message is produced; if the state isn't found, "syntax error"
  184.  *  is produced.
  185.  */
  186. novalue yyerror(tok, lval, state)
  187. int tok, state;
  188. nodeptr lval;
  189.    {
  190.    register struct errmsg *p;
  191.  
  192.  
  193.    if (tok_loc.n_file)
  194.       fprintf(stderr, "File %s; ", tok_loc.n_file);
  195.    if (tok == EOFX)   /* special case end of file */
  196.       fprintf(stderr, "unexpected end of file\n");
  197.    else {
  198.       fprintf(stderr, "Line %d # ", Line(lval));
  199.       if (Col(lval))
  200.          fprintf(stderr, "\"%s\": ", mapterm(tok,lval));
  201.       for (p = errtab; p->e_state != state && p->e_state >= 0; p++) ;
  202.       fprintf(stderr, "%s\n", p->e_mesg);
  203.       }
  204.    tfatals++;
  205.    nocode++;
  206.    }
  207.  
  208. /*
  209.  * tfatal produces the translator error messages s1 and s2 (if nonnull).  The
  210.  *  location of the error is found in tok_loc.
  211.  */
  212. novalue tfatal(s1, s2)
  213. char *s1, *s2;
  214.    {
  215.  
  216.    if (tok_loc.n_file)
  217.       fprintf(stderr, "File %s; ", tok_loc.n_file);
  218.    fprintf(stderr, "Line %d # ", tok_loc.n_line);
  219.    if (s2)
  220.       fprintf(stderr, "\"%s\": ", s2);
  221.    fprintf(stderr, "%s\n", s1);
  222.    tfatals++;
  223.    nocode++;
  224.    }
  225.  
  226. /*
  227.  * nfatal produces the error message s and associates it with source location
  228.  *  of node.
  229.  */
  230. novalue nfatal(n, s)
  231. nodeptr n;
  232. char *s;
  233.    {
  234.  
  235.    fprintf(stderr, "File %s; ", File(n));
  236.    fprintf(stderr, "Line %d # ", Line(n));
  237.    fprintf(stderr, "%s\n", s);
  238.    tfatals++;
  239.    nocode++;
  240.    }
  241.  
  242. /*
  243.  * mapterm finds a printable string for the given token type
  244.  *  and value.
  245.  */
  246. static char *mapterm(typ,val)
  247. int typ;
  248. nodeptr val;
  249.    {
  250.    register struct toktab *t;
  251.    register int i;
  252.  
  253.